#ifndef COMPLEX_H
#define COMPLEX_H
class complex
{
    double re, im;

public:
    complex(double r = 0, double i = 0) : re(r), im(i) {}
    double real() { return re; }
    double imag() { return im; }
    complex &operator+=(complex);
    complex &operator+=(double);
    complex &operator-=(complex);
    complex &operator-=(double);
    complex &operator*=(complex);
    complex &operator*=(double);
    complex &operator/=(complex);
    complex &operator/=(double);
}; // complex
double abs(complex);
double norm(complex); // abs*abs
double real(complex);
double imag(complex);
complex exp_im(double);
double arg(complex);
complex conj(complex);
complex exp(complex);
complex log(complex);
complex sqrt(complex);
complex pow(complex, complex);
complex pow(complex, double);
complex acos(complex);
complex acosh(complex);
complex asin(complex);
complex asinh(complex);
complex atan(complex);
complex atanh(complex);
complex cos(complex);
complex cosh(complex);
complex sin(complex);
complex sinh(complex);
complex tan(complex);
complex tanh(complex);
complex operator+(complex, complex);
complex operator+(double, complex);
complex operator+(complex, double);
complex operator-(complex);
complex operator-(complex, complex);
complex operator-(double, complex);
complex operator-(complex, double);
complex operator*(complex, complex);
complex operator*(double, complex);
complex operator*(complex, double);
complex operator/(complex, complex);
complex operator/(double, complex);
complex operator/(complex, double);
#endif